The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, including complex combinations of hardware and software. Software products are typically written in a high level language (HLL) in many separate pieces (such as procedures, modules, and objects). For the purposes of convenience in discussing the concepts of the invention disclosed herein, any piece of software that may be separately processed from other pieces are referred to generically herein as "modules", recognizing that a module may be a procedure, an object, or any other suitable piece of software. The HLL version of the software is known as source code. Each source code module is typically processed separately by a software tool known as a compiler, and the modules are then integrated together using a software tool known as a linker. When a change to a program is needed, one or more modules of the program that need to be changed may be changed and compiled without re-compiling unaffected modules. The newly changed and compiled modules may then be linked with the unaffected modules, resulting in a new software product with enhanced capabilities when compared to the previous release.
The modular approach to programming described above gives great flexibility in changing features of a software product. This flexibility, however, requires careful tracking of each different module that makes up a release of the software product. Several different releases may need to be available at any given time, which may require that several different versions of the same module be available at the same time. A storage area for holding all different modules of a software product is referred to herein as a source code repository. Known computer systems track software configurations stored within a source code repository using proprietary code that is programmed for a specific source code repository environment. If a new and different environment is desired, the source code repository software must be modified to accommodate the new environment. Making this type of modification requires an in-depth knowledge of the specific source code repository software being used. No common programming interface is used, and reusing code on one system in a different environment may be unpractical. Without a mechanism that can be readily customized and extended to provide a source code repository that has the desired functionality, the time required to program and maintain source code repository software will be excessively long and expensive.